package cn.xzqwjw.taskmanager.domain.pojo;

import cn.xzqwjw.taskmanager.common.validator.ValidGroupUpdate;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * @author rush
 */
@EqualsAndHashCode(callSuper = true)
@TableName(value = "t_ul_file")
@Data
public class UlFile extends Model<UlFile> implements Serializable {

  @TableField(exist = false)
  private static final long serialVersionUID = 1L;

  @Override
  public Serializable pkVal() {
    return this.id;
  }

  @TableId(type = IdType.AUTO)
  @NotNull(message = "id不能为空", groups = ValidGroupUpdate.class)
  private Integer id;

  /**
   * UUID 编号
   */
  @NotNull(message = "UUID 编号不能为空！")
  @Length(max = 36, message = "最多36个字符")
  private String uuid;

  /**
   * 上传文件的管理员
   */
  private Integer idAdmin;

  /**
   * 标签，多个标签用英文半角逗号分隔，如果是古籍扫描件，一定带 AB_SCAN
   */
  @Length(max = 1000, message = "最多1000个字符")
  private String tag;

  /**
   * 上传时间
   */
  @NotNull(message = "上传时间不能为空")
  private LocalDateTime dtUpload;

  /**
   * 存储在服务器上的完整路径
   */
  @NotNull(message = "完整路径不能为空")
  @Length(max = 300, message = "最多{max}个字符")
  private String pathEntire;

  /**
   * 文件的相对根目录的路径
   */
  @NotNull(message = "相对路径不能为空")
  @Length(max = 300, message = "最多{max}个字符")
  private String pathRelative;

  /**
   * 文件名，不包括扩展名
   */
  @NotNull(message = "文件名不能为空")
  @Length(max = 200, message = "最多{max}个字符")
  private String fileName;

  /**
   * 文件扩展名，包括 .
   */
  @Length(max = 10, message = "最多{max}个字符")
  private String extName;

  /**
   * 文件hash值
   */
  @Length(max = 100, message = "最多{max}个字符")
  private String fileHash;

  /**
   * 文件大小
   */
  private Long fileSize;

  /**
   * 文件mimeType
   */
  @Length(max = 100, message = "最多{max}个字符")
  private String mimeType;

  /**
   * 文件备注
   */
  @Length(max = 200, message = "最多{max}个字符")
  private String remark;

  /**
   * 删除标志
   */
  private Boolean flagDeleted = false;

  /**
   * 上传文件所属任务id
   */
  private Integer idTask;

  /**
   * 客户端原始文件名，不包括扩展名
   */
  @Length(max = 100, message = "最多{max}个字符")
  private String fileNameClient;

  /**
   * 用于显示的文件名
   */
  @Length(max = 100, message = "最多{max}个字符")
  private String fileNameShow;

  /**
   * 任务名
   */
  @TableField(exist = false)
  private String taskName;

  /**
   * 上传的管理员姓名
   */
  @TableField(exist = false)
  private String adminName;

}
